Given two strings S and T, determine if they are both one edit distance apart.

给定两个字符串,判断他们是否是一步变换得到的。

在这里需要注意几点:

1、不等于1的变换都要返回false(包括变换次数等于0)。

2、还有很多细节需要注意。

方法如下:

1、直接判断:1)如果差值大于1,直接返回false。

        2)如果长度相同,那么依次判断,是否只有一个字母不一样。

        3)如果不一样,那么看是否是只是多出了一个字母。

  1. public class Solution {
  2. public boolean isOneEditDistance(String s, String t) {
  3. int len1 = s.length();
  4. int len2 = t.length();
  5. if (len1 < len2){
  6. return isOneEditDistance(t, s);
  7. }
  8. if (len1 - len2 > 1){
  9. return false;
  10. }
  11. boolean flag = false;
  12. if (len1 == len2){
  13. for (int i = 0; i < len1; i++){
  14. if (s.charAt(i) != t.charAt(i)){
  15. if (!flag){
  16. flag = true;
  17. } else {
  18. return false;
  19. }
  20. }
  21. }
  22. return flag;
  23. } else {
  24. int sStart = 0;
  25. int tStart = 0;
  26. while (tStart < len2){
  27. if (s.charAt(sStart) == t.charAt(tStart)){
  28. tStart++;
  29. sStart++;
  30. } else {
  31. if (!flag){
  32. flag = true;
  33. sStart++;
  34. } else {
  35. return false;
  36. }
  37. }
  38. }
  39. return true;
  40. }
  41. }
  42. }

2、利用substring和equals来判断,代码会简洁很多。

  1. public class Solution {
  2. public boolean isOneEditDistance(String s, String t) {
  3. for (int i = 0; i < Math.min(s.length(), t.length()); i++){
  4. if (s.charAt(i) != t.charAt(i)){
  5. if (s.length() == t.length()){
  6. return s.substring(i + 1).equals(t.substring(i + 1));
  7. } else if (s.length() == t.length() - 1){
  8. return s.substring(i).equals(t.substring(i + 1));
  9. } else {
  10. return s.substring(i + 1).equals(t.substring(i));
  11. }
  12. }
  13. }
  14. return Math.abs(s.length() - t.length()) == 1;
  15. }
  16. }

这两者的速度都差不多,都是2ms左右,答案有一些是1ms,将string换成char[]就可以了,所以就没贴上去的必要了。

✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java的更多相关文章

  1. 利用编辑距离(Edit Distance)计算两个字符串的相似度

    利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...

  2. [LeetCode] 161. One Edit Distance 一个编辑距离

    Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...

  3. [leetcode]161. One Edit Distance编辑步数为一

    Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...

  4. [LeetCode#161] One Edit Distance

    Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...

  5. java中判断两个字符串是否相等的问题

    我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...

  6. mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)

    1.这里这个是目前有问题的   #创建FUNCTION  DELIMITER ;     CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...

  7. python利用difflib判断两个字符串的相似度

    我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...

  8. 【LeetCode】161. One Edit Distance

    Difficulty: Medium  More:[目录]LeetCode Java实现 Description Given two strings S and T, determine if the ...

  9. 161. One Edit Distance

    题目: Given two strings S and T, determine if they are both one edit distance apart. 链接: http://leetco ...

随机推荐

  1. 微内核架构(Microkernel Architecture)

    微内核架构(Microkernel Architecture) 微内核架构有时也被成为插件架构模式(plug-in architecture pattern),通常用于实现基于产品的应用,如Eclip ...

  2. Android 四大组件之二(Service)

    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...

  3. 第5章 Web自动化测试

    5.1 Selenium简介 5.1.1 自动化测试简介 5.1.2 Selenium简介 5.2 Selenium2环境搭建 5.3 Java基础 5.3.1 新建Java工程和类 5.3.2 Ec ...

  4. RLP编码

    RLP(Recursive Length Prefix, 递归长度前缀编码),是Ethereum中对象序列化的一个主要的编码方式,其目的是对任意嵌套的二进制数据的序列进行编码. RLP的目的仅仅是编码 ...

  5. html知识2

    1.超链接 语法:<a href "" target="打开方式" name="页面锚点名称">链接文字或者图片</a&g ...

  6. ajax json 动态传值

    <a href="#" onclick="getRightInfo(${v.ctid})"></a> <div id=" ...

  7. 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  8. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 Scripts.Render和Styles.Render

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...

  9. PHP内置函数file_put_content(),将数据写入文件,使用FILE_APPEND 参数进行内容追加

    file_put_contents(fileName,data,flags,context) 入参说明: 参数 说明 fileName 要写入数据的文件名 data 要写入的数据.类型可以是 stri ...

  10. web相关概念

    1.web概念:web1.0:静态页面为主(传统企业的页面)特点:由网站提供方来更新和维护内容web2.0:以动态页面为主,以用户为中心,网站由用户参与或编辑web3.0:智能化人与人与机器的交流(各 ...