PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《只含有重复字母的单词检测》

12/4/2018 —— 

题目: 只包含重复字母的单词称为dupledrome,比如“llaammaa”,”ssaabb”。编写一个名为isDupledrome的方法,检测一个单词是否只是由重复的字母组成。

java代码:

package dupledrome;

public class dupledrome {

    public static void main(String[] args) {
        String s = "abcdefgabcdefg";
        System.out.println(isDuplerome(s));
    }

    public static boolean isDuplerome(String s) {
        int n = s.length();
        int flag = 0;
        int flagj = 0; //判断后面有没有出现重复字符
        int m = 0;
        for (int i=0;i<n;i++) {
            //System.err.println("i="+i);
            flag = 0;
            flagj =0;
            for (int j=i;j<n-1;j++) {
              //  System.out.println("j="+j);
                if (s.charAt(i)==s.charAt(j+1)) {
                    flag = 1;
                    flagj = 1;
                    m++;
              //      System.out.println("a   "+flag+"  "+flagj);
                    break;
                }
            }
            if (flagj==0) {
                //System.err.println("flagj");
                for (int j=0;j<i;j++) {
                  //  System.err.println("j="+j);
                    if (s.charAt(i)==s.charAt(j)) {
                        flag = 1;
                        m++;
                    //    System.out.println("b   "+flag);
                        break;
                    }
                }
            }
        }
        if (m==n) {
            return true;
        }else {
            return false;
        }
    }
}
  • 1、检测一个单词是否只是由重复的字母组成,就是说在这个单词里,每一种出现的字母至少要有两个。所以,可以设置一个检测,从第一个字母开始,分别与单词中的其他字母比较,当找到一个字母与之相同时,就可以停止比较,进行后一个字母的比较。
  • 2、当要比较的这个字母为整个单词的首字母时,其只需和后面的单词做比较就好,同理得尾字母只需同前面字母比较。但是当一个字母在中间时,它需要和其前面部分和后面部分比较。因此需要设置不同的循环条件。同时,当其与后面部分比较发现相同字母时,不必要在于前面部分比较,所以可设置一个标志位flagj来判断还需不需要进行与其前面部分的比较。
  • 3、整个单词中的每一个字母都需要进行一次主动比较,即主动与其他字母比较。比较的结果有两种,一种是找到相同,一种是没找到,分别对应了flag的两个数值。而采用m,这是一个计数器,记录了总共有多少个字母通过主动比较找到了相同字母。如果m等于单词长度,也就意味着这个单词中的每一个字母都至少出现了两次,也就满足题目。而m不等于单词长度,m只可能小于单词长度,表明这个单词中至少有一个字母是只出现一次的。